﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BEL;
using System.IO;

namespace Guia_Digital_Georeferenciada.Mantenimientos
{
    public partial class MantenimientoRubros : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //VerificarUsuario();
                string RubId = Convert.ToString(Request.QueryString["RubId"]);
                if (!string.IsNullOrEmpty(RubId))
                {
                    Rubro rub = new Rubro();
                    rub.RubId = int.Parse(RubId);
                    rub = rub.BuscarRubroPorId(rub.RubId);
                    if (rub != null)
                    {
                        txtNombre.Text = rub.RubNombre;
                        cmdAceptar.Enabled = false;
                        cmdModificar.Visible = true;
                    }
                }
                else
                {
                    cmdAceptar.Enabled = true;
                    cmdModificar.Visible = false;
                }
            }
        }

        protected void cmdAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (!string.IsNullOrEmpty(txtNombre.Text))
                {
                    if (ValidarImagen())
                    {

                        Rubro rub = new Rubro();
                        Boolean result = rub.AltaRubro(Convert.ToString(txtNombre.Text));

                        // Guardo imagen
                        GuardarImagenRubro();
                      


                        if (result)
                        {
                            limpiarCampos();
                            lblError.Text = "El rubro se dio de alta correctamente";
                        }
                    }
                    else
                    {
                        lblErrorImagen.Text = "Debe seleccionar una imagen para el rubro";
                    }
                }
                else
                {
                    lblErrorNombre.Text = "El campo rubro se encuentra vacío";
                }
            }
            catch (System.Exception ex)
            {
                Response.Write("<script>alert('Ha ocurrido un error en la aplicación')</script>" + ex.Message);
            }
        }

        private bool ValidarImagen()
        {
            bool retorno = true;
            string nombre = uploadFile.FileName;
            string extension = Path.GetExtension(nombre);
            if (ValidaExtension(extension))
            {
                lblErrorImagen.Text = "La imagen es válida";
            }
            else
            {
                retorno = false;
                lblErrorImagen.Text = "Imagen inválida";
            }
            return retorno;
        }
        public void limpiarCampos()
        {
            this.txtNombre.Text = string.Empty;
        }

        protected void cmdCancelar_Click(object sender, EventArgs e)
        {
            // Retornar al principal.
        }

        protected void cmdModificar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtNombre.Text))
            {
                string RubroId = Convert.ToString(Request.QueryString["RubId"]);
                if (!string.IsNullOrEmpty(RubroId))
                {
                    if (ValidarImagen())
                    {


                        Rubro rub = new Rubro();
                        Boolean result = rub.ModificarRubro(Convert.ToInt32(RubroId), txtNombre.Text);


                        // Guardo imagen
                        GuardarImagenRubro();

                        if (result)
                        {
                            limpiarCampos();
                            lblError.Text = "El rubro se modifico correctamente";
                        }
                    }
                }
                else
                {
                    lblErrorImagen.Text = "Debe seleccionar una imagen para el rubro";
                }
            }
            else
            {
                lblError.Text = "Error al modificar el rubro";
            }
        }

        protected void cmdListar_Click(object sender, EventArgs e)
        {
            lblError.Text = "";
            List<Rubro> rubros = (new Rubro()).BuscarRubros();
            GridRubros.DataSource = rubros;
            GridRubros.DataBind();
        }

        private void GuardarImagenRubro()
        {
            try
            {
                if (uploadFile.HasFile)
                {
                    // Se verifica que la extensión sea de un formato válido
                    string ext = uploadFile.PostedFile.FileName;
                    ext = ext.Substring(ext.LastIndexOf(".") + 1).ToLower();
                    string[] formatos =
                      new string[] { "jpg", "jpeg", "bmp", "png", "gif" };
                    if (Array.IndexOf(formatos, ext) < 0)
                        lblErrorImagen.Text = ("Formato de imagen inválido.");
                    //guardo imagen
                    GuardarArchivo(uploadFile.PostedFile);
                }
                else
                    lblErrorImagen.Text = ("Seleccione un archivo del disco duro.");
           
            }
            catch (System.Exception ex)
            {
                Response.Write("<script>alert('Ha ocurrido un error en la aplicación')</script>" + ex.Message);
            }
        }

        private void GuardarArchivo(HttpPostedFile file)
        {
            // Se carga la ruta física de la carpeta temp del sitio_
            string ruta = Server.MapPath("~/Imagenes/ImagenesRubros");

            // Si el directorio no existe, crearlo
            if (!Directory.Exists(ruta))
                Directory.CreateDirectory(ruta);

            string archivo = String.Format("{0}\\{1}", ruta, "rubro_" + Convert.ToString(txtNombre.Text) + ".jpg");

            // Verificar que el archivo no exista
            if (File.Exists(archivo))
                lblErrorImagen.Text = (String.Format("Ya existe una imagen con nombre\"{0}\".", ruta, Convert.ToString(txtNombre.Text) + ".jpg"));
            else
            {
                file.SaveAs(archivo);
            }
        }


        private Boolean ValidaExtension(string sExtension)
        {
            Boolean rel = false;
            switch (sExtension)
            {
                case ".jpg":
                case ".jpeg":
                case ".png":
                case ".gif":
                case ".bmp":
                    rel = true;
                    break;
                default:
                    rel = false;
                    break;

            }
            return rel;
        }
    }
}